﻿// --------------------------------
// <copyright file="UniqueElementList.cs" company="TRONSoft">
//     Copyright (c) TRONSoft.
// </copyright>
// <license>
//   This source code is subject to terms and conditions of the Microsoft
//   Public License. A copy of the license can be found in the License.html
//   file at the root of this distribution. If you cannot locate the
//   Microsoft Public License, please send an email to dlr@microsoft.com.
//   By using this source code in any fashion, you are agreeing to be bound 
//   by the terms of the Microsoft Public License. You must not remove this
//   notice, or any other, from this software.
// </license>
// <author>Tron</author>
// ---------------------------------

using System;
using System.Collections.Generic;

namespace Tronsoft.Actucal.CalculationEngineCreator
{
    [Serializable]
    public class UniqueElementList<T> : List<T>
    {
        public new void Add(T item)
        {
            if (base.Contains(item))
                throw new CalculationException("cannot add an item twice.");

            base.Add(item);
        }

        public new void AddRange(IEnumerable<T> collection)
        {
            if (collection == null) throw new ArgumentNullException("collection");

            foreach (T item in collection)
            {
                if (base.Contains(item))
                    throw new CalculationException("cannot add an item twice.");


                base.Add(item);
            }
        }

        public new void Insert(int index, T item)
        {
            if (base.Contains(item))
                throw new CalculationException("cannot add an item twice.");

            base.Insert(index, item);
        }

        public new void InsertRange(int index, IEnumerable<T> collection)
        {
            if (collection == null) throw new ArgumentNullException("collection");

            foreach (T item in collection)
            {
                if (base.Contains(item))
                    throw new CalculationException("cannot add an item twice.");

                base.Insert(index, item);
            }
        }
    }
}